package com.example.demo.jucConcurrent.CopyOnWriteArrayList详解;

/**
 * 由于写操作的时候,需要拷贝数组,会消耗内存,如原数组的内容比较多,可能导致yong gc或者FuLl gc
 *
 * 不能用于读场景,想拷贝数组,新增元素都需要时间,所以调用一个Set操作后,读取到数据可能还是旧但是
 * 数据,虽然CopyOnWriteArraylist能做到最终一致性,但是还没发满足实时性要求
 *
 *
 * copyOnWriteArrayList合适读写少的场景,不过这类慎用
 * 因为谁也不知道CopyOnWriteArrayList到底放置多少数据,万一数据稍微有点多,每次ADD/SET都要
 * 重新复制数组,这个代价太高了,在高性能的互联网中,这操作纷纷中引起故障
 *
 * CopyOnWriteArrayList为什么并发安全性能比Vector好
 * Vector对单独的add,remove等方法都在方法上加了Synchronized;并且一个线程A调用size的时候,另一个线程B执行了,remove
 * 然后size的值就不能最新的,然后线程A调用Remove就会越界,(这时候就需要加一个Synchronized)这样就导致有个双重锁,效率大大降低,何必呢,
 */
public class CopyOnWriteArrayListdemo02 {
}
